package controle;

public class Teste {
	private Viewport viewport;

	private WorldModel worldModel;

	private volatile boolean stopped = false;

	private volatile boolean paused = false;

	public Animation(Viewport v, WorldModel wm) {
		viewport = v;
		worldModel = wm;
	}

	public void stopSafe() {
		stopped = true;
	}

	public void pauseAnimation() {
		paused = true;
	}

	public void continueAnimation() {
		paused = false;
	}

	public void run() {

		int numTime = 0;
		long lastTime = System.currentTimeMillis();
		while (!stopped) {

			if (paused) {
				lastTime = System.currentTimeMillis();
				numTime = 0;
				continue;
			}

			// atualizado a cena toda, avancando todos os objetos pelo tempo
			// que cada frame demora pra ser gerado
			worldModel.update(spf);
			// mando repintar os objetos
			viewport.repaint();

			numTime++;
			if (numTime == 30) {
				numTime = 0;
				long actTime = System.currentTimeMillis();
				// aqui acho o frames por segundo (transformo ja em segundos por
				// frame pois
				// eh isso que vou usar) dos ultimos 30 frames
				spf = ((double) (actTime - lastTime)) / (30.0f * 1000.0f);
				lastTime = actTime;
			}

			try {
				Thread.sleep(10); // durmo um pouco soh pra nao sobrecarregar
									// o sistema
				// mas jogos de verdade, que ficam em fullscreen,
				// nao usam sleep hehe sobrecarrega mesmo
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

	private double spf = 1.0f / 60.0f; // segundos por frame (1/60 eh um valor
	// inicial qualquer)

}
